package baiqitun.stupro.common.service;


import baiqitun.stupro.common.entity.TreeNode;
import baiqitun.stupro.common.model.TreeModel;

import java.util.List;
import java.util.Map;

/**
 * 树形节点
 * @author kedaji
 */
public interface TreeNodeService<T extends TreeNode> extends MyService<T>{

    /**
     * 在指定表中查询以指定节点为根的节点树
     * @param id 节点id
     * @return 节点树
     */
    TreeModel<T> getTree(String id);

    /**
     * 获取出符合条件的子节点组成的树
     * @param id 节点id
     * @param queryEntity 查询条件（不能为空）
     * @param conditions 过滤条件，过滤条件是对查询条件查询得出的数据再次进行过滤
     * @return 节点树
     */
    TreeModel<T> getTree(String id, T queryEntity, Map<String, Object> conditions);

    /**
     * 获取当前节点的顶级节点
     * @param id 当前节点的id
     * @param queryEntity 查询条件
     * @return 顶级节点
     */
    TreeNode getTopNode(String id, T queryEntity);

    /**
     * 获取每个顶级部门（系）与子部门（班级）组成的树
     * @return 树列表
     */
    List<TreeModel<T>> listRootTree();
    /**
     * 获取每个顶级部门（系）与子部门（班级）组成的树，使用时需要子类重写此方法
     * @param queryEntity 查询条件
     * @param conditions 过滤条件
     * @return 树列表
     */
    List<TreeModel<T>> listRootTree(T queryEntity, Map<String, Object> conditions);
}
